package com.tedu.oop.day7;

/**
 * 测试抽象类中构造函数的用法
 *
 * 1.抽象类中可以有构造方法
 * 2.父类构造方法优先于子类执行
 * 3.抽象类中的构造方法是为了子类创建对象时使用 super()默认存在;
 *   本身不能创建本类对象(实例化)
 */
public class Test3_Abstract2 {
    public static void main(String[] args) {
        Animal2 a=new Dog();//创建多态对象
        a.eat();


    }
}
//1.创建抽象父类
abstract class Animal2{
    static {
        System.out.println("父类静态代码块");
    }
    {
        System.out.println("父类构造代码块");
    }
    public Animal2(){
        System.out.println("父类无参构造方法");
    }
    public abstract void eat();


}

//2.创建子类
class Dog extends Animal2{
    static{
        System.out.println("子类静态代码块");
    }
    {
        System.out.println("子类构造代码块");
    }
    public Dog(){
        //super()默认存在
        System.out.println("子类无参构造方法");
    }

    @Override
    public void eat() {
        System.out.println("爱吃骨头棒子");
    }

    public Dog(int a){
        System.out.println(a);
    }

}